// 获取阿里云内置的 crypto 模块
const crypto = require('crypto');

exports.main = async (event, context) => {
  const { action, params } = event;
  
  // 注册处理
  if (action === 'register') {
    try {
      // 参数验证
      if (!params.username || params.username.length < 3) {
        return { code: 400, message: '用户名长度需至少3位' };
      }
      
      if (!params.password || params.password.length < 6) {
        return { code: 400, message: '密码长度需至少6位' };
      }
      
      // 使用阿里云内置的数据库操作
      const db = uniCloud.database();
      const users = db.collection('users');
      
      // 检查用户名是否已存在
      const userCheck = await users.where({
        username: params.username
      }).count();
      
      if (userCheck.total > 0) {
        return { code: 409, message: '用户名已被注册' };
      }
      
      // 生成密码盐和加密密码
      const salt = Math.random().toString(36).substring(2, 15);
      
      // 使用阿里云支持的加密方式
      const passwordHash = crypto.createHash('sha256')
        .update(params.password + salt)
        .digest('hex');
      
      // 创建用户记录
      const userData = {
        username: params.username,
        password: passwordHash,
        salt: salt,
        role: 'user',
        createdAt: new Date().getTime()
      };
      
      const result = await users.add(userData);
      
      return {
        code: 0,
        message: '注册成功',
        uid: result.id
      };
      
    } catch (e) {
      console.error('注册错误:', e);
      return {
        code: 500,
        message: '注册失败，请稍后重试'
      };
    }
  }
  
  // 登录处理
  if (action === 'login') {
    try {
      if (!params.username || !params.password) {
        return { code: 400, message: '用户名和密码不能为空' };
      }
      
      const db = uniCloud.database();
      const users = db.collection('users');
      
      // 查询用户
      const userResult = await users.where({
        username: params.username
      }).get();
      
      if (!userResult.data || userResult.data.length === 0) {
        return { code: 401, message: '用户名或密码错误' };
      }
      
      const user = userResult.data[0];
      
      // 验证密码
      const passwordHash = crypto.createHash('sha256')
        .update(params.password + user.salt)
        .digest('hex');
      
      if (passwordHash !== user.password) {
        return { code: 401, message: '用户名或密码错误' };
      }
      
      // 登录成功 - 返回用户基本信息
      return {
        code: 0,
        message: '登录成功',
        userInfo: {
          uid: user._id,
          username: user.username,
          role: user.role || 'user'
        }
      };
      
    } catch (e) {
      console.error('登录错误:', e);
      return { 
        code: 500,
        message: '系统错误，请稍后重试'
      };
    }
  }
  
  return { 
    code: 404, 
    message: `不支持的操作: ${action}`
  };
};